package webservice;

import java.rmi.RemoteException;
import java.util.*;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.SOAPException;
import org.apache.axis.AxisProperties;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.message.SOAPHeaderElement;

/**
 * WebService(获取电影排片表)
 * @author wangjg
 *
 */
public class WebServiceConsumer {

	public static void main(String[] args) throws Exception {
		try {
			// 服务端的url，需要根据情况更改。
			String endpointURL = "http://222.68.17.176/SMG_WebService/SMGWebService.asmx?wsdl";
//			AxisProperties.setProperty("http.proxyHost", "ws-zzisa-01.wicresoft.com"); //代理IP
//			AxisProperties.setProperty("http.proxyPort", "8080"); //代理端口
//			AxisProperties.setProperty("http.proxyUser", "**********"); //用户名
//			AxisProperties.setProperty("http.proxyPassword", "********"); //密码
			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(new java.net.URL(endpointURL));
			call.setSOAPActionURI("http://www.siff.com/" + "GetFilmArrange");
			call.setOperationName(new QName("http://www.siff.com/", "GetFilmArrange"));// 设置操作的名称。
			// 由于需要认证，故需要设置调用的用户名和密码。
			SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("http://www.siff.com/", "SHCredentials");
			soapHeaderElement.setNamespaceURI("http://www.siff.com/");
			try {
				soapHeaderElement.addChildElement("AccountID").setValue("SMGTest");
				soapHeaderElement.addChildElement("PIN").setValue("3848B59D-E0B1-423D-9E6E-441C4A4221FF");
			} catch (SOAPException e) {
				e.printStackTrace();
			}
			call.addHeader(soapHeaderElement);
			call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型
			call.addParameter("ResultXml", XMLType.XSD_STRING, ParameterMode.OUT);// 参数的类型
			call.addParameter("ErrorString", XMLType.XSD_STRING, ParameterMode.OUT);// 参数的类型
			String ret = (String) call.invoke(new Object[] {});// 执行调用
			Map outputs = call.getOutputParams();
			HashMap map = new HashMap();
			// 当输出参数不为空时，则遍历输出参数的集合.
			if (outputs != null) {
				for (Iterator i = outputs.keySet().iterator(); i.hasNext();) {
					Object obj = i.next();
					String name;
					Object value;
					// 如果输出参数为String类型则直接转换。
					if (obj.getClass().getName().equals("java.lang.String")) {
						name = (String) obj;
					} else {
						name = ((QName) obj).getLocalPart();
					}
					value = outputs.get(obj);
					map.put(name, value);
				}
			}
			if (map.containsKey("ResultXml")) {
				System.out.print((String) map.get("ResultXml"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
